package qi

import (
	"strings"
)

type Wb_文本 struct {
}

func (*Wb_文本) Xzwb_寻找文本(原始文本, 寻找文本 string) (位置 int) {
	位置 = strings.Index(原始文本, 寻找文本)
	return
}
func (*Wb_文本) Anydwb_any到文本(转换参数 any) (返回_值 string) {
	返回_值 = any_到文本(转换参数)
	return
}

// @返回字符串 原始文本 中字符串  寻找文本 最后一次出现的位置
func (*Wb_文本) Xzwb_寻找文本_最后位置(原始文本, 寻找文本 string) (位置 int) {
	位置 = strings.Index(原始文本, 寻找文本)
	return
}

//	文本_取左边
//
// @原始文本 被取的文本
// @寻找文本 关键词
// @启始寻找位置  -1 为 从右往左边  一个汉字 3个位置
func (*Wb_文本) Qwbzb_取文本左边(原始文本, 寻找文本 string, 启始寻找位置 int) (结果 string) {
	位置 := 0
	if 启始寻找位置 < 0 {
		位置 = strings.LastIndex(原始文本, 寻找文本)
	} else {
		位置 = strings.Index(原始文本[启始寻找位置:], 寻找文本)
		if 位置 > -1 {
			位置 = 启始寻找位置 + 位置
		}
	}
	if 位置 == -1 {
		结果 = ""
		return
	}
	结果 = 原始文本[:位置]
	return
}

//	文本_取右边
//
// @原始文本 被取的文本
// @寻找文本 关键词
// @启始寻找位置  -1 为 从右往左边  一个汉字 3个位置
func (*Wb_文本) Qwbyb_取文本右边(原始文本, 寻找文本 string, 启始寻找位置 int) (结果 string) {
	位置 := 0
	if 启始寻找位置 < 0 {
		位置 = strings.LastIndex(原始文本, 寻找文本)
	} else {
		位置 = strings.Index(原始文本[启始寻找位置:], 寻找文本)
		if 位置 > -1 {
			位置 = 启始寻找位置 + 位置
		}
	}
	if 位置 == -1 {
		结果 = ""
		return
	}
	结果 = 原始文本[位置+len(寻找文本):]
	return
}

func (*Wb_文本) Qczjwb_取出中间文本(原始文本, 开始文本, 结束文本 string, 取第几个结束文本 ...int) (结果 string) {
	结束符号位 := 1
	if len(取第几个结束文本) > 0 {
		结束符号位 = 取第几个结束文本[0]
	}
	结果 = ""
	位置开始 := strings.Index(原始文本, 开始文本)
	if 位置开始 < 0 {
		return
	}
	判断文本 := 原始文本[位置开始+len(开始文本):]
	循环次数 := 0
	for strings.Contains(判断文本, 结束文本) {
		循环次数++
		位置结束 := strings.Index(判断文本, 结束文本)
		当前值 := 判断文本[:位置结束]
		结果 = 结果 + 当前值
		if 循环次数 == 结束符号位 {
			return
		}
		结果 = 结果 + 结束文本
		判断文本 = 判断文本[位置结束+len(结束文本):]
	}
	结果 = ""
	return
}

func (*Wb_文本) Qwbcxcs_取文本出现次数(原始文本, 寻找文本 string) (次数 int) {

	次数 = strings.Count(原始文本, 寻找文本)
	return
}

// 通过 {1},{2},{3} 进行站为替换对应文本位置
func (*Wb_文本) Cjwb_创建文本(原始文本 string, 对应文本 ...any) (返回值 string) {
	返回值 = c_创建文本(原始文本, 0, 对应文本...)
	return
}

func (*Wb_文本) Zwbfg_子文本分割(原始文本, 分割字符 string) (返回切片 []string) {
	返回切片 = strings.Split(原始文本, 分割字符)
	return
}
func (*Wb_文本) Kbffg_空白符分割(原始文本 string) (返回切片 []string) {
	返回切片 = strings.Fields(原始文本)
	return
}

func (*Wb_文本) Cqphb_重切片合并(原始文本 []string, 合并连接符 string) (结果 string) {
	结果 = strings.Join(原始文本, 合并连接符)
	return
}

// @W_文本_子文本替换
//
//	@替换次数 <0 或 大于存在数 为替换全部
//
// @从左往右边  true   重右到左 则填false
func (*Wb_文本) Zwbth_子文本替换_有方向(原始文本, 被替换字符, 替换字符 string, 替换次数 int, 从左往右边 bool) (返回值 string) {
	存在数量 := strings.Count(原始文本, 被替换字符)
	if 存在数量 == 0 {
		return 原始文本
	}
	if 替换次数 < -0 || 替换次数 >= 存在数量 {
		返回值 = strings.Join(strings.Split(原始文本, 被替换字符), 替换字符)
		return
	}
	if 替换次数 > 0 {
		if !从左往右边 {
			返回值 = 原始文本
			for i := 0; i < 替换次数; i++ {
				位置 := strings.LastIndex(返回值, 被替换字符)
				返回值 = 返回值[:位置] + 替换字符 + 返回值[位置+len(被替换字符):]
			}
			return
		} else {
			返回值 = 原始文本
			for i := 0; i < 替换次数; i++ {
				位置 := strings.Index(返回值, 被替换字符)
				返回值 = 返回值[:位置] + 替换字符 + 返回值[位置+len(被替换字符):]
			}
			return

		}
	}
	return 原始文本
}

// @将字符串 原始文本 前n个不重叠  被替换字符 子串都替换为  替换字符 的新字符串
// @如果n<0会替换所有old子串。
func (*Wb_文本) Zwbth_子文本替换(原始文本, 被替换字符, 替换字符 string, 替换次数 int) (返回值 string) {

	返回值 = strings.Replace(原始文本, 被替换字符, 替换字符, 替换次数)
	return
}
func (*Wb_文本) Pdsfyqz_判断是否有前缀(原始文本, 前缀文本 string) (返回值 bool) {
	返回值 = strings.HasPrefix(原始文本, 前缀文本)
	return
}
func (*Wb_文本) Pdsfyhz_判断是否有后缀(原始文本, 后缀文本 string) (返回值 bool) {
	返回值 = strings.HasSuffix(原始文本, 后缀文本)
	return
}
func (*Wb_文本) Pdsfcz_判断是否存在(原始文本, 寻找文本 string) (返回值 bool) {
	返回值 = strings.ContainsAny(原始文本, 寻找文本)
	return
}

// @判断字符串s是否包含unicode的码值r
func (*Wb_文本) Pdsfcz_判断是否存在_unicode(原始文本 string, 寻找文本 rune) (返回值 bool) {
	返回值 = strings.ContainsRune(原始文本, 寻找文本)
	return
}

// @判断字符串 原始文本 是否包含  寻找文本  字符串中的任意一个字符
func (*Wb_文本) Pdsfcz_判断是否存在_任一字符(原始文本 string, 寻找文本 string) (返回值 bool) {
	返回值 = strings.ContainsAny(原始文本, 寻找文本)
	return
}

// @判断s和t两个UTF-8字符串是否相等，忽略大小写
func (*Wb_文本) Pdsfxt_判断是否相同(原始文本, 对比文本 string) (返回值 bool) {
	返回值 = strings.EqualFold(原始文本, 对比文本)
	return
}

/*
@ 按字典顺序比较a和b字符串的大小
@ 如果 a > b，返回一个大于 0 的数
@ 如果 a > b，如果 a == b，返回 0
@ 如果 a < b，返回一个小于 0 的数
*/
func (*Wb_文本) Pdsxdx_判断顺序大小(原始文本, 对比文本 string) (返回值 int) {
	返回值 = strings.Compare(原始文本, 对比文本)
	return
}

func (*Wb_文本) Dxx_到小写(原始文本 string) (返回值 string) {
	返回值 = strings.ToLower(原始文本)
	return
}
func (*Wb_文本) Ddx_到大写(原始文本 string) (返回值 string) {
	返回值 = strings.ToTitle(原始文本)
	return
}

// @将字符串 原始文本 首尾包含在  条件字符 中的任一字符去掉
func (*Wb_文本) Sswbhzf_删首尾包含字符(原始文本, 条件字符 string) (返回值 string) {
	返回值 = strings.Trim(原始文本, 条件字符)
	return
}
func (*Wb_文本) Ssbhzf_删首包含字符(原始文本, 条件字符 string) (返回值 string) {
	返回值 = strings.TrimLeft(原始文本, 条件字符)
	return
}
func (*Wb_文本) Sswb_删首文本(原始文本, 条件文本 string) (返回值 string) {
	返回值 = strings.TrimPrefix(原始文本, 条件文本)
	return
}
func (*Wb_文本) Swbhzf_删尾包含字符(原始文本, 条件字符 string) (返回值 string) {
	返回值 = strings.TrimRight(原始文本, 条件字符)
	return
}
func (*Wb_文本) Swwb_删尾文本(原始文本, 条件文本 string) (返回值 string) {
	返回值 = strings.TrimSuffix(原始文本, 条件文本)
	return
}
func (*Wb_文本) Sswk_删首尾空(原始文本 string) (返回值 string) {
	返回值 = strings.TrimSpace(原始文本)
	return
}
